import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;
public class BSTdriver {

	// public class IntNode extends <Node <Integer>>;
	public static void main(String[] args)
	{
	    BinarySearchTree<Integer> tree = new BinarySearchTree<Integer>();
	    tree.insertByLoop(7);
	    tree.insertByLoop(2);
	    tree.insertByLoop(12);
	    tree.insertByLoop(1);
	    tree.insertByLoop(6);
	    tree.insertByLoop(10);
	    tree.insertByLoop(13);
	    tree.insertByLoop(4);
	    tree.insertByLoop(8);
	    tree.insertByLoop(11);
	    tree.insertByLoop(3);
	    tree.insertByLoop(5);
	    tree.insertByLoop(9);
//
//	    Node<Integer> a13 = new Node<Integer>(13);
//	    Node<Integer> a19 = new Node<Integer>(19);
//	    Node<Integer> a15 = new Node<Integer>(15, a13, a19);
//	    Node<Integer> a3 = new Node<Integer>(3);
//	    Node<Integer> a8 = new Node<Integer>(8);
//	    Node<Integer> a7 = new Node<Integer>(7);
//	    Node<Integer> a25 = new Node<Integer>(25);
//	    Node<Integer> a14 = new Node<Integer>(14);
//	    Node<Integer> a22 = new Node<Integer>(22, a15,a25);
//	    Node<Integer> a27 = new Node<Integer>(27, a22, a14);
//	    Node<Integer> a2 = new Node<Integer>(2,a3, null);
//	    Node<Integer> a9 = new Node<Integer>(9, a8, a7);
//	    Node<Integer> a6 = new Node<Integer>(6,a2,a9);
//	    Node<Integer> aa13 = new Node<Integer>(13, a6,a27);
//	    
//	  
//	    printIsBST(a13, tree);
//	    printIsBST(a19, tree);
//	    printIsBST(a15, tree);
//	    printIsBST(a3, tree);
//	    printIsBST(a8, tree);
//	    printIsBST(a7, tree);
//	    printIsBST(a25, tree);
//	    printIsBST(a14, tree);
//	    printIsBST(a22, tree);
//	    printIsBST(a27, tree);
//	    printIsBST(a2, tree);
//	    printIsBST(a9, tree);
//	    printIsBST(a6, tree);
//	    printIsBST(aa13, tree);
//	    		
	    
//	    
//	    boolean type = true;
//	    Scanner scan = new Scanner(System.in);
//	    int num;
//	    while(type)
//	    {
//	    	System.out.print("Type a number, enter 0 to quit -> ");
//	    	num = scan.nextInt();
//	    	if(num != 0)
//	    	{
//	    		tree.insertByLoop(num);
//	    		System.out.println();
//	    		tree.printOutputs();
//	    	}
//	    	else
//	    		break;
//	    }
//	    
//	    
//	    
//	    if(tree.isBSTree())
//	    	System.out.println("Its BST");
//	    else
//	    	System.out.println("Its NOT BST");
	    
//	    tree.insertByRecursion(7);
//	    tree.insertByRecursion(2);
//	    tree.insertByRecursion(12);
//	    tree.insertByRecursion(1);
//	    tree.insertByRecursion(6);
//	    tree.insertByRecursion(10);
//	    tree.insertByRecursion(13);
//	    tree.insertByRecursion(4);
//	    tree.insertByRecursion(8);
//	    tree.insertByRecursion(11);
//	    tree.insertByRecursion(3);
//	    tree.insertByRecursion(5);
//	    tree.insertByRecursion(9);
//
//	    
//	    System.out.println("PreOrder");
//	    tree.printPreOrder();
//	    System.out.println();

//	    System.out.println("InOrder");
//	    tree.printInOrder();
//	    System.out.println();
//
//	    System.out.println("PostOrder");
//	    tree.printPostOrder();
//
	    System.out.println("\nTree");
	    tree.printLevelOrder();
	    System.out.println();
	    System.out.println("size is  "+tree.getSize());

//	    ArrayList<Integer> list = new ArrayList<Integer>();
//	    list.add(7);
//	    list.add(2);
//	    list.add(1);
//	    list.add(6);
//	    list.add(4);
//	    list.add(3);
//	    list.add(5);
//	    list.add(12);
//	    list.add(10);
//	    list.add(8);
//	    list.add(9);
//	    list.add(11);
//	    list.add(13);

//	    
//	    if(tree.isBST(list))
//	    	System.out.println("They are the same tree");
//	    else
//	    	System.out.println("They are NOT the same tree");

//	    tree.printOutputs();
//	    tree.delete(4);
//	    tree.delete(7);
//	    tree.delete(10);
//	    tree.insertByLoop(100);
//	    tree.printOutputs();

//	    LinkedList<Integer> Q1 = new LinkedList<Integer>();
//	    LinkedList<Integer> Q2 = new LinkedList<Integer>();
//	    
//	    while(!Q1.isEmpty())
//	    {
//	    	Q1.add(Q2.peekFirst());
//	    	tree.insertByLoop(Q2.removeFirst());
//	    	tree.printOutputs();
//	    }
//	    
//	    while(!Q2.isEmpty())
//	    {
//	    	tree.delete(Q1.removeFirst());
//	    	tree.printOutputs();
//	    }
	    
	    System.out.println("Program Done");
//	    System.out.println("size is  "+tree.getSize());
	    
	}
	
	public static void printIsBST(Node<Integer> aa13, BinarySearchTree<Integer> tree)
	{
		
	    if(tree.isBSTree(aa13))
	    	System.out.println(aa13 +" is BST");
	    else
	    	System.out.println(aa13 + " is NOT BST");
	}
	
}
